package org.nw.jf.ext.co;

import javax.servlet.http.HttpServletRequest;

import org.nw.vo.ComboxJsonVO;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 使用远程加载数据的select的model，子类需要继承，子类必须是一个nutz的action类，并且将其默认的mapping以/common开头，
 * 这是为了避免权限问题
 * 
 * @author xuqc
 * @date 2013-12-13 上午10:18:11
 */
public abstract class RemoteComboxModel {

	String dataUrl;// 加载数据的url，即loadOptions方法对应的url
	String getByValueUrl;// 根据value加载显示名称的url

	public RemoteComboxModel() {
		dataUrl = getRequestMappingValue() + "/loadOptions.json";
		getByValueUrl = getRequestMappingValue() + "/getByValue.json";
	}

	/**
	 * 加载下拉框的下拉项
	 * 
	 * @param request
	 * @return
	 * @author xuqc
	 * @date 2013-12-13
	 * 
	 */
	@RequestMapping("/loadOptions.json")
	@ResponseBody
	public abstract ComboxJsonVO loadOptions(HttpServletRequest request);

	/**
	 * 当下拉框的store还没有加载时，此时需要根据value查询显示的值
	 * 
	 * @param request
	 * @return
	 * @author xuqc
	 * @date 2013-12-13
	 * 
	 */
	@RequestMapping("/getByValue.json")
	@ResponseBody
	public abstract String getByValue(HttpServletRequest request);

	/**
	 * 获取RequestMapping注解的value，既url
	 * 
	 * @return 如果没有则返回空串，以便拼接url时不会出现null
	 */
	public String getRequestMappingValue() {
		Object[] objArr = this.getClass().getDeclaredAnnotations();
		for(Object o : objArr) {
			if(o instanceof RequestMapping) {
				RequestMapping rm = (RequestMapping) o;
				String[] arr = rm.value();
				if(arr.length == 1) {
					return arr[0];
				}
			}
		}
		return "";
	}

	public String getDataUrl() {
		return dataUrl;
	}

	public void setDataUrl(String dataUrl) {
		this.dataUrl = dataUrl;
	}

	public String getGetByValueUrl() {
		return getByValueUrl;
	}

	public void setGetByValueUrl(String getByValueUrl) {
		this.getByValueUrl = getByValueUrl;
	}
}
